using System;
using System.Collections.Generic;
using System.Linq;

using PMServiceDesk.DataType;
using PMServiceDesk.DataAccess;
using PMServiceDesk.Utils.ManejoDatos;

namespace PMServiceDesk.BusinessLogic
{
    public class RecursoLineaBaseDetalleLogic
    {
        #region Variables

        private RecursoLineaBaseDetalleData _recursoLineaBaseDetalleData;

        #endregion

        #region Constructores

        public RecursoLineaBaseDetalleLogic()
        {
            _recursoLineaBaseDetalleData = new RecursoLineaBaseDetalleData();
        }

        #endregion

        #region Metodos

        public RecursoLineaBaseDetalleType CargarPorId(string id)
        {
            _recursoLineaBaseDetalleData.FiltrarPorId(id);

            return _recursoLineaBaseDetalleData.Cargar();
        }

        public void Grabar(RecursoLineaBaseDetalleType recursoLineaBaseDetalle)
        {
            _recursoLineaBaseDetalleData.Grabar(recursoLineaBaseDetalle);
        }

        public void GrabarLineaBaseDetalle(string lineaBaseDetalleId, List<RecursoImportarType> recursosImportar)
        {
            foreach (RecursoImportarType recurso in recursosImportar)
            {
                this.Grabar
                (
                    new RecursoLineaBaseDetalleType
                    {
                        LineaBaseDetalleId = lineaBaseDetalleId,
                        RecursoId = recurso.RecursoId,
                        PorcentajeUso = recurso.Porcentaje,
                        Cantidad = recurso.Cantidad
                    }
                );
            }
        }

        public List<RecursoLineaBaseDetalleType> CargarExplorador(string lineaBaseDetalleId,string recursoId)
        {
            if(lineaBaseDetalleId != "") _recursoLineaBaseDetalleData.FiltrarPorLineaBaseDetalleId(lineaBaseDetalleId);
            if(recursoId != "") _recursoLineaBaseDetalleData.FiltrarPorRecursoId(recursoId);

            return _recursoLineaBaseDetalleData.CargarListaVista();
        }

        public List<RecursoLineaBaseDetalleType> CargarLineaBasePorCodigoCuenta(string proyectoId, string lineaBaseId, string codigoCuenta)
        {
            List<RecursoLineaBaseDetalleType> l = _recursoLineaBaseDetalleData.CargarLineaBasePorCodigoCuenta(lineaBaseId, codigoCuenta);

            ProyectoType proyecto = new ProyectoLogic().CargarPorId(proyectoId);

            foreach (RecursoLineaBaseDetalleType r in l)
                r.CostoTotal_Format = proyecto.SimboloMoneda + " " + ConvertFormat.Decimal_To_Char(r.CostoTotal);

            return (
                        from registro in l
                        orderby registro.TipoRecurso
                        select registro
                   ).ToList();
        }

        #endregion
    }
}
